Этот шаг не сильно отличается от предыдущего. Просто добавили еще 1 источник света. Мелкая хитрость состоит в том, что в OpenGL первый (т.е. нулевой) источник всегда как бы включен, т.е. излучает по оси Z с интенсивностью 1.0, 1.0, 1.0, 0.0 по всем составляющим света. Второй источник надо просто включить.
Зададим положение и интенсивность 2-го источника:
GLfloat light1_Position[4] = {0.0f, 0.0f, -2.5f, 1.0f};
GLfloat light1_Intensity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
Теперь в функции StartRC включим его:
glEnable(GL_LIGHT1);
и дадим ему определенный тип:
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_Intensity);
Источники света в принципе бывают рассеяные (т.е. diffuse) и направленные (т.е. ambient), которые могут быть как бесконечно удалены (т.е. лучи идут как бы параллельно), так и типа прожектора с определенной диаграммой направленности. Вообще-то свойств у источников света достаточно много и они связаны с еще большим количеством свойств материалов объектов. Если мне не будет лень, то постепенно пройдемся по многим из них ;)
Теперь посмотрим на функцию Draw():
GLvoid Draw()
{
static GLfloat rot = 0.0f;
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f (1.0, 1.0, 0.5);
glCallList(CUBE_LIST);
glRotatef(rot, 0.0f, 1.0f, 1.0f);
glPushMatrix();
glLightfv(GL_LIGHT0, GL_POSITION, light0_Position);
glTranslatef(light0_Position[0],light0_Position[1],light0_Position[2]);
glScalef(0.1f, 0.1f, 0.1f);
glCallList(CUBE_LIST);
glPopMatrix();
// ------------ Start New Block --------------
glPushMatrix();
glLightfv(GL_LIGHT1, GL_POSITION, light1_Position);
glRotatef(rot, 1.0f, 0.0f, 0.0f);
glTranslatef(light1_Position[0],light1_Position[1],light1_Position[2]);
glScalef(0.1f, 0.1f, 0.1f);
DrawCube();
glPopMatrix();
// ------------ End New Block ----------------
rot+=1.0f;
glPopMatrix();
SwapBuffers(hDC);
}
Новый код находится между символами комментариев. Если посмотреть повнимательнее, то он копирует блок кода идущий чуть выше, за исключением еще одной функции glRotatef, которая просто вращает источник вокруг X-а. Смысла никакого, но хоть немного повеселее чем по кругу.